//
// Created by ASUS on 2024/2/6.
//
#include <bits/stdc++.h>
using namespace std;

int manacher(string &s) {
    int n = s.length();
    string t="$";
	t.push_back('#');
	for(int i=0;i<n;i++){
		t.push_back(s[i]);
		t.push_back('#');
	}
	t.push_back('&');
	int len=t.length();
	vector<int> p(len,0);
	int center = 0, max_right = 0;
	for (int i = 1; i < len; ++i) {
		int i_mirror = 2 * center - i;
		if (max_right >i) { // 在最右边界的覆盖范围内, 就利用回文串特征计算长度
			p[i] = min(max_right - i,p[i_mirror]); // 使用min()是为了防止超出最右边界
		} else {
			p[i] = 0;
		}
		while (t[i - 1 - p[i]] == t[i + 1 + p[i]])
			++p[i];
		if (i + p[i] > max_right) { // 更新右边界的回文串中心
			center = i;
			max_right = i + p[i];
		}
	}

	int max_len = 0;
	// int pos = 0;  //记录最长回文子串中心的位置
	for (int i = 1; i < len; ++i)
		if (max_len < p[i]) {
			max_len = p[i];
			// pos = i;
		}
	return max_len;//最长回文串的起始位置为: (pos - max_len) / 2
}

int main() {
    string s;
    cin >> s;
    cout << manacher(s) << endl;
    return 0;
}